<?php

/*
 * @Description: 
 */
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
use think\facade\Route;

Route::get('think', function () {
    return 'hello,ThinkPHP8!';
});

Route::get('hello/:name', 'Index/hello');
Route::get('test/:info', 'Index/test');

Route::rule('test2/:id/[:info]', 'Index/test2');

// // 静态路由
// Route::rule("test", "Index/test");

// // 带一个参数
// Route::rule("details/:id", "Index/details");

// // 带两个参数
// Route::rule("details/:id/:uid", "Index/details");

// // 带可选参数，一般在后面
// Route::rule("details/:id/[:uid]", "Index/details");

// // 全动态地址，不限定details，url可以是：abc/5/6，后面details也可以动态
// Route::rule(":details/:id/:uid", "Index/details");

// // 正则规则，完全匹配
// Route::rule("details/:id/:uid$", "Index/details");

// 闭包支持我们可以通过 URL 直接执行，而不需要通过控制器和方法；
// Route::get('test3', function () {
//     return 'hello,ThinkPHP8!';
// });

// 闭包支持我们可以通过 URL 直接执行，而不需要通过控制器和方法；`   
// Route::get('test4', function ($version) {
//     return 'hello,ThinkPHP8!'.$version;
// });

// 变量规则
// - 系统默认的路由变量规则为\w+，即字母、数字、中文和下划线；
// - 如果你想更改默认的匹配规则，可以修改 **config/route.php** 配置；

// - 如果我们需要对于具体的变量进行单独的规则设置，则需要通过 **pattern()** 方法；
// - 将 details 方法里的 id 传值，严格限制必须只能是数字\d+；
// Route::rule("details/:id", "Index/details")->pattern(['id' => '\d+']);
// // 多个参数
// Route::rule("details/:id/:uid", "Index/details")->pattern(['id' => '\d+', 'uid' => '\d+']);

// // 支持替换斜杠
// Route::rule("details-:id", "Index/details");

// // 支持组合变量<id>方式
// Route::rule("details-<id>", "Index/details");


// 路由分组
// Route::group('admin', function () {
//     Route::get('index', 'admin/index');
//     Route::get('add', 'admin/add');
// });

// Route::group('admin/', function () {
//     Route::get(':id', 'admin/index');
//     Route::get(':name', 'admin/add');
// })->ext('html') -> pattern(['id' => '\d+', 'name' => '\w+']);
// URL1: http://www.tp.com:8000/index/5.html
// URL2: http://www.tp.com:8000/index/world.html

// Route::group(function () {
//     Route::get('index', 'admin/index');
//     Route::get('add', 'admin/add');
// });

// 使用 prefix()方法，可以省略掉分组地址里的控制器；
// Route::group('admin', function () {
//     Route::get('index', 'index');
//     Route::get('add', 'add');
// })->prefix('admin')->ext('html');
// URL1: http://www.tp.com:8000/index/test.html
// URL2: http://www.tp.com:8000/index/world.html

// URL生成
// 使用 **url()** 助手函数来生成 定义好的路由地址，放在在控制器使用；
// 静态不带参数的
// Route::rule("test", "Index/test")->ext("html");
// // 控制器段获取url：/test.html
// return url("Index/test");

// // 动态带参数的
// Route::rule("details/:id", "Index/details")->ext("html");
// // 控制器段获取url：/details/5.html
// return url("Index/details", ["id"=>5]);

// // url参数一和路由的rule的参数二是一致的，可以通过name方法复刻；
// Route::rule("details/:id", "Index/details")->name("de")->ext("html");
// // 控制器段获取url：/details/5.html
// return url("de", ["id"=>5]);

// // 完整带域名的地址：http://www.tp.com:8000/details/5.html
// return url("de", ["id"=>5])->domain(true);
// return url("de", ["id"=>5])->domain("www.tp.com");

// http://www.tp.com:8000/blog				//GET 访问的是index方法，用于显示数据
// http://www.tp.com:8000/blog/create		//GET 访问的是create方法，新增数据的表单页面
// http://www.tp.com:8000/blog/5			//GET 访问的是read方法，读取指定id的一条数据
// http://www.tp.com:8000/blog/5/edit		//GET 访问的是edit方法，读取指定id数据并显示修改表单

Route::resource("blog", "Blog");

//相应的 delete($blog_id)
// Route::delete("blog/:blog_id", "Blog/delete")->vars(["blog_id"=>"blog_id"]); 

// 只允许指定的这些操作
// Route::resource("blog", "Blog")->only(["index","save","create"]);

Route::rest("create", ["GET", "/add", "add"]);

// 批量
// Route::rest([
//     "save" => ["POST", "", "store"],
//     "update" => ["PUT", "/:id", "save"],
//     "delete" => ["DELETE", "/:id", "destory"],
// ]);
